
/**
 * @file Login.h
 * @brief Fichier d'entête du module Login.
 *
 * @author Mohammad NOROUZZADEH, Lotfi, Saleh
 */
#ifndef _LOGIN_H
#define _LOGIN_H


/* ********************************************************************* */
/*                                                                       */
/*                       Librairies de Login                                */
/*                                                                       */
/* ********************************************************************* */

#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>


#include "UtilStr.h"
#include "Chemin.h"

/* ********************************************************************* */
/*                                                                       */
/*                        Définitions de types                           */
/*                                                                       */
/* ********************************************************************* */

/**
 * @struct Login
 * @brief Structure utilisée pour la gestion d'une Login.
 *
 * Cette structure est utilisée pour gérer .Les champs de cette structures
   doivent être modifiés ou lus par les accesseurs et mutateurs.
 */


struct sLogin
{
    char * identifiant;
    char * mdp;
    int type;
};

/**
 * @typedef Login
 * @brief Redéfinit la structure sLogin
 */
typedef struct sLogin Login;

/**
 * @fn void initLogin(Login * Login,const int identifiant,const char * mdp,const char * type);
 * @brief Initialise un Login.
   initLogin initialise identifiant, mdp et type (après vérification) de la structure Login

 * @param[in, out] etu Pointeur vers l'etu à initialiser.
 * @param[in] identifiant Code de l'Login.
 * @param[in] mdp mdp de l'Login.
 * @param[in] type type de l'Login.
 * @return 0 si tout est OK
 */
void initLogin(Login * log,char* id,char *mdp, int type);

/**
 * @fn Login * creLogin(const int identifiant,const char * mdp,const char * type);
 * @brief Crée un Login en mémoire.

 * @param[in] identifiant Code de l'Login.
 * @param[in] mdp Hauteur de l'Login.
 * @param[in] type type de l'Login.
 * @return un pointeur vers un Login
 */
Login *creLogin(char* id,char *mdp, int type);

/**
 * @fn void libLogin(Login * etu);
 * @brief Libere un Login en mémoire.

 * @param[in, out] etu Pointeur vers l'etu.
 * @return 0 si tout est OK
 */
void liblog(Login *log);

/**
 * @fn detruireLogin(Login ** etu);
 * @brief Détruit un Login en mémoire.

 * @param[in, out] etu Pointeur vers l'etu.
 * @return 0 si tout est OK
 */
void detLog(Login ** log);

/* ******************************************************************** */
/*																		*/
/*           Accesseurs et Mutateurs de la structure Login                */
/*																		*/
/* ******************************************************************** */
/**
 * @fn int getNumLogin(const Login * etu);
 * @brief returner identifiant.

 * @param[in] etu pointeur vers l'etu.
 * @return identifiant
 */
char *getId(const Login *);

/**
 * @fn void setidentifiant(Login * etu, int identifiant);
 * @brief modifie le champ identifiant de l'etu.

 * @param[in, out] etu Pointeur vers l'etu.
 * @param[in] identifiant Code de l'Login.
 * @return 0 si tout est OK
 */
void setId(Login *,const char *identifiant);

/**
 * @fn char * getNomLogin(const Login * etu);
 * @brief returner mdp.

 * @param[in] etu pointeur vers l'etu.
 * @return mdp.
 */

char * getmdp(const Login*);

/**
 * @fn void setNomLogin(Login * etu,const char * mdp);
 * @brief modifie le champ mdp de l'etu.

 * @param[in, out] etu Pointeur vers l'etu.
 * @param[in] mdp mdp de l'Login.
 * @return 0 si tout est OK.
 */
void setMdp(Login *,const char *mdp);

/**
 * @fn char * getPremdp(const Login * etu);
 * @brief returner mdp.

 * @param[in] etu pointeur vers l'etu.
 * @return mdp.
 */
int getTypeLog(const Login*);

/**
 * @fn void setPremdp(Login * etu, const char *type);
 * @brief modifie le champ mdp de l'etu.

 * @param[in, out] etu Pointeur vers l'etu.
 * @param[in] mdp mdp de l'Login.
 * @return 0 si tout est OK.
 */
void setTypeLog(Login *,const int typelog);

/**
 * @fn void affLogin(const Login * etu);
 * @brief Afficher l'etu.

 * @param[in] etu pointeur vers l'etu.
 * @return 0 si tout est OK
 */
void affLogin(const Login *);

/* ********************************************************************* */
/*                                                                       */
/*             Fonctions relatives aux gestiond'Login                       */
/*                                                                       */
/* ********************************************************************* */

/**
 * @fn void savLoginParElem(const int identifiant,const char * mdp,const char * type);
 * @brief saover Login dans un fichier binaire.
 *
 * @param[in] identifiant .
 * @param[in] mdp .
 * @param[in] type .

 * @return 0 si tout est OK.
 */
void savLog( Login *pLog);

/**
 * @fn int rchLoginParCode(const int codeLogin);
 * @brief recherche Login dans un fichier binaire.
 *
 * @param[in] identifiant .

 * @return 0 s'il n'existe pas.
 * @return 1 s'il existe.
 */
Login* rchLogParIdMdp( char* identifiant, char*mdp);

/**
 * @fn Login *recLoginParCode(const int codeLogin);
 * @brief recupérer Login dans un fichier binaire.
 *
 * @param[in] identifiant .

 * @return Login s'il n'existe pas.
 * @return NULL s'il existe.
*/
Login *recLoginParId( char* pId);

/**
 * @fn int supLoginParCode(const int codeLogin);
 * @brief supprimer Login dans un fichier binaire.
 *
 * @param[in] identifiant .

 * @return -1 s'il n'existe pas.
 * @return 0 s'il supprime.
 */
int  supLog(Login*log);

int  supLogParId(char  id[]);

/**
 * @fn mdfLoginParCode(const int codeLogin, const Login *nLogin);
 * @brief modifier Login dans un fichier binaire.
 *
 * @param[in] identifiant .
 * @param[in] Login .

 * @return -1 s'il n'existe pas.
 * @return 1 s'il modifie.
 * @return 0 si non.
 */
int modifLogin(Login*log,Login*log2);


/**
 * @fn affLogin_DB();
 * @brief Afficher base de donnee de Login .


 * @return 0 si tout est OK.
 */
void affLog_DB();

/**
 * @fn void regLogin() ;
 * @brief Test le module Login
 */
void regLog();

#endif
